//package com.my.login;
//
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONObject;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang3.StringUtils;
//import org.jeecg.modules.app.vo.MiniPhoneNumberReqVo;
//import org.jeecg.modules.app.vo.MiniUserReqVo;
//import org.jeecg.modules.constant.RedisConstants;
//import org.jeecg.modules.constant.UserConstants;
//import org.jeecg.modules.excetion.SellException;
//import org.jeecg.modules.system.entity.SysUser;
//import org.jeecg.modules.system.service.ISysUserService;
//import org.jeecg.modules.util.PhoneVerifyUtil;
//import org.jeecg.modules.util.WxPhoneUtils;
//import org.springframework.beans.BeanUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.stereotype.Service;
//
//import javax.annotation.Resource;
//import java.util.Date;
//import java.util.UUID;
//import java.util.concurrent.TimeUnit;
//
//@Slf4j
//@Service
//public class WeiXinMiniServiceImpl implements IWeiXinMiniService {
//
//	@Resource
//	private RedisTemplate<String, String> redisTemplate;
//
//
//	@Autowired
//	private ISysUserService userService;
//
//
//
//	@Override
//	public WeChatClientInfoRespVo getPhoneNumber(MiniPhoneNumberReqVo reqVo) {
//
//		WeChatClientInfoRespVo respVo = new WeChatClientInfoRespVo();
//		Object sessionKeyObj = redisTemplate.opsForValue().get(RedisConstants.redis_mini_token + reqVo.getUserId());
//		if (sessionKeyObj == null || sessionKeyObj.equals("")) {
//			throw new SellException(500, "小程序未登录，请先登录后再试");
//		}
//		String phoneStr = null;
//		try {
//			phoneStr = WxPhoneUtils.decryptS5(reqVo.getEncryptedData(), "UTF-8", sessionKeyObj.toString(),
//					reqVo.getIv());
//		} catch (Exception e) {
//			e.printStackTrace();
//			throw new SellException(500, "小程序解密失败");
//		}
//		log.info("phoneStr:{}", phoneStr);
//		if (StringUtils.isEmpty(phoneStr)) {
//			throw new SellException(500, "小程序解密失败");
//		}
//		JSONObject json = JSONObject.parseObject(phoneStr);
//		String phoneNumber = json.getString("phoneNumber");
//		if (StringUtils.isEmpty(phoneNumber)) {
//			throw new SellException(500, "小程序获取手机号失败");
//		}
//
//		SysUser user = userService.getById(reqVo.getUserId());
//		if (null == user) {
//			throw new SellException(500, "用户不存在,请先登录");
//		}
//
//		if (!PhoneVerifyUtil.isPhone(phoneNumber)) {
//			throw new SellException(500, "手机号格式错误");
//		}
//
//		if (!StringUtils.isEmpty(user.getPhone()) && !user.getPhone().equals(phoneNumber)) {
//			throw new SellException(500, "该手机号已绑定，请更换");
//		}
//
//		if (!StringUtils.isEmpty(user.getPhone()) && !StringUtils.isEmpty(user.getOpenId())) {
//			throw new SellException(500, "已绑定手机号，请勿重复绑定");
//		}
//
//		// 如果此手机号没有注册过，则判断可以直接使用此数据
//		SysUser userInfo = userService.getUserByPhone(phoneNumber);
//		if (null == userInfo) {
//			SysUser yxMember = new SysUser();
//			yxMember.setId(reqVo.getUserId());
//			yxMember.setPhone(phoneNumber);
//			yxMember.setUpdateTime(new Date());
//			boolean res = userService.updateById(yxMember);
//			if (res) {
//				throw new SellException(500, "绑定修改失败");
//			}
//			respVo.setId(user.getId());
//			respVo.setPhone(yxMember.getPhone());
//			respVo.setOpenId(user.getOpenId());
//			respVo.setHeadImg(user.getAvatar());
//			respVo.setIsBinding(StringUtils.isEmpty(yxMember.getPhone()) ? 0 : 1);
//			respVo.setNickName(user.getNickName());
//			respVo.setSex(user.getSex());
//			respVo.setName(yxMember.getUsername());
//		} else {
//			// 如果不等于空，则根据openid是否存在直接合并
//			if (StringUtils.isEmpty(userInfo.getOpenId())) {
//				SysUser yxMember = new SysUser();
//				yxMember.setId(userInfo.getId());
//				yxMember.setUpdateTime(new Date());
//				yxMember.setUsername(user.getUsername());
//				yxMember.setOpenId(user.getOpenId());
//
//				if (!StringUtils.isEmpty(user.getAvatar()) && !StringUtils.isEmpty(userInfo.getAvatar())
//						&& userInfo.getAvatar().equals("default_img.png")) {
//					yxMember.setAvatar(user.getAvatar());
//				}
//				boolean res = userService.updateById(yxMember);
//				if (res) {
//					throw new SellException(500, "绑定修改失败");
//				} else if (userInfo.getOpenId() != user.getOpenId()) {
//					throw new SellException(500, "手机号已被他人使用，请更换");
//				}
//				respVo.setId(userInfo.getId());
//				respVo.setPhone(userInfo.getPhone());
//				respVo.setOpenId(user.getOpenId());
//				respVo.setHeadImg(userInfo.getAvatar());
//				respVo.setIsBinding(StringUtils.isEmpty(userInfo.getPhone()) ? 0 : 1);
//				respVo.setNickName(userInfo.getNickName());
//				respVo.setSex(userInfo.getSex());
//				respVo.setName(user.getUsername());
//
//			}
//
//			// 存token
//			respVo.setToken(UUID.randomUUID().toString());
//			redisTemplate.opsForValue().set(RedisConstants.redis_mini_token + respVo.getToken(), JSON.toJSONString(respVo),
//					UserConstants.PWD_EXPIRE_DAYS, TimeUnit.DAYS);
//		}
//		return respVo;
//	}
//
//	@Override
//	public void loginOut(String token) {
//		if(StringUtils.isEmpty(token)) {
//			throw new SellException(500,"入参token不能为空");
//		}
//		redisTemplate.delete(RedisConstants.redis_mini_token+token);
//	}
//
//	@Override
//	public WeChatClientInfoRespVo updateUserInfo(MiniUserReqVo reqVo) {
//		WeChatClientInfoRespVo respVo = new WeChatClientInfoRespVo();
//		SysUser sysUser=new SysUser();
//		sysUser.setId(reqVo.getUserId());
//		BeanUtils.copyProperties(reqVo,sysUser);
//		if (reqVo.getHeaderImg()!=null){
//			sysUser.setAvatar(reqVo.getHeaderImg());
//		}
//		userService.updateById(sysUser);
//		SysUser user = userService.getById(reqVo.getUserId());
//		if (null == user) {
//			throw new SellException(500, "用户不存在,请先登录");
//		}
//
//		if (reqVo.getPhone()!=null && !PhoneVerifyUtil.isPhone(reqVo.getPhone())) {
//			throw new SellException(500, "手机号格式错误");
//		}
//
////		if (!StringUtils.isEmpty(user.getPhone()) && !user.getPhone().equals(reqVo.getPhone())) {
////			throw new SellException(500, "该手机号已绑定，请更换");
////		}
////
////		if (!StringUtils.isEmpty(user.getPhone()) && !StringUtils.isEmpty(user.getOpenId())) {
////			throw new SellException(500, "已绑定手机号，请勿重复绑定");
////		}
//		respVo.setId(user.getId());
//		respVo.setPhone(reqVo.getPhone());
//		respVo.setOpenId(user.getOpenId());
//		respVo.setHeadImg(user.getAvatar());
//		respVo.setIsBinding(StringUtils.isEmpty(reqVo.getPhone()) ? 0 : 1);
//		respVo.setNickName(user.getNickName());
//		respVo.setSex(user.getSex());
//		respVo.setName(user.getRealname());
//		return respVo;
//	}
//}
